package dragon.core.io;

import java.io.InputStream;
import java.util.List;

import dragon.core.exception.ExceptionHandler;

/**
 * 文件管理器(包含常用文件操作)
 */
public interface FileManager {
	/**
	 * 创建文件夹
	 * 
	 * @param folderPath
	 *            文件夹路径
	 * @throws ExceptionHandler
	 */
	public void createFolder(String folderPath) throws ExceptionHandler;

	/**
	 * 获取文件夹下的文件
	 * 
	 * @param folderPath
	 *            文件夹路径
	 * @param type
	 *            获取种类 0 包含文件和文件夹，1文件，2文件夹
	 * @param recursive
	 *            是否递归处理子目录 <code>true</code>递归处理 <code>false</code> 不递归处理
	 * @param includeSelf
	 *            是否包含自己
	 * @return List<LogicFile> 返回指定文件入口下的所有文件(逻辑文件) <code>java.util.List<LogicFile></code>
	 * @throws ExceptionHandler
	 */
	public List<LogicFile> getLogicFiles(String folderPath, int type, boolean recursive, boolean includeSelf) throws ExceptionHandler;

	/**
	 * 创建文件
	 * 
	 * @param filePath
	 *            文件路径
	 * @param content
	 *            文件内容
	 * @throws ExceptionHandler
	 */
	public void createFile(String filePath, String content) throws ExceptionHandler;

	/**
	 * 创建文件
	 * 
	 * @param ins
	 *            文件流
	 * @param filepath
	 *            文件路径
	 * @throws ExceptionHandler
	 */
	public void createFile(InputStream ins, String filepath) throws ExceptionHandler;

	/**
	 * 读取文件内容
	 * 
	 * @param filePath
	 *            文件路径
	 * @return
	 * @throws ExceptionHandler
	 */
	public String getFileContent(String filePath) throws ExceptionHandler;

	/**
	 * 判断文件是否存在
	 * 
	 * @param filePath
	 *            文件路径
	 * @return
	 * @throws ExceptionHandler
	 */
	public boolean isFileExist(String filePath) throws ExceptionHandler;

	/**
	 * 文件重命名
	 * 
	 * @param filePath
	 *            文件路径
	 * @param newFileName
	 *            新的文件名
	 * @throws ExceptionHandler
	 */
	public void renameFile(String filePath, String newFileName) throws ExceptionHandler;

	/**
	 * 修改文件
	 * 
	 * @param filePath
	 *            文件路径
	 * @param content
	 *            文件内容
	 * @throws ExceptionHandler
	 */
	public void modifyFile(String filePath, String content) throws ExceptionHandler;

	/**
	 * 移动文件
	 * 
	 * @param source
	 *            源文件(夹)路径
	 * @param target
	 *            目标文件夹路径
	 * @throws ExceptionHandler
	 */
	public void moveFile(String source, String target) throws ExceptionHandler;

	/**
	 * 拷贝文件
	 * 
	 * @param source
	 *            源文件(夹)路径
	 * @param target
	 *            目标文件夹路径
	 * @throws ExceptionHandler
	 */
	public void copyFile(String source, String target) throws ExceptionHandler;

	/**
	 * 删除文件
	 * 
	 * @param filePath
	 *            文件路径，多个文件路径以|分隔
	 */
	public void deleteFile(String filePath);

	/**
	 * List<File>数据必须包含文件夹，以及跟文件夹 如：d:\t d:\t\t1.txt d:\t\t2 d:\t\t2\t2.txt d:\t\t2\新建文件夹 d:\t\t2\新建文件夹\新建文本文档.txt d:\t\t3 d:\t\t3\t3.txt
	 * 
	 * @param files
	 * @return
	 */
	public List<LogicFile> Path2Tree(List<LogicFile> files);

}
